package com.main.antenne;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Configuration;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Bundle;
import android.util.DisplayMetrics;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MainActivity extends Activity {

	private Button fussballMaenner_Button;
	private Button fussballDamen_Button;
	private Button handball;
	private Button hockey;
	private AlertDialog alert;
	private boolean keineVerbindung = false;
	public static MediaPlayer radioPlayer;

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);

		if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT)
			setContentView(R.layout.activity_main_portrait);
		else if (getResources().getConfiguration().orientation == Configuration.ORIENTATION_LANDSCAPE)
			setContentView(R.layout.activity_main_landscape);

		// Zuweisen der onClickListener,
		// bei klick wird ein neuer Intent mit der jeweiligen Sportart gestartet
		fussballMaenner_Button = (Button) findViewById(R.id.fussballMaenner_button);

		fussballMaenner_Button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				prüfeVerbindung();
				if (!keineVerbindung) {
					startActivity(new AntenneIntent(MainActivity.this,
							LigaActivity.class, "Fussball", null, null));
					overridePendingTransition(R.anim.openactivity,
							R.anim.activitydisappear);
				}
			}
		});

		fussballDamen_Button = (Button) findViewById(R.id.fussballDamen_button);
		fussballDamen_Button.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				prüfeVerbindung();
				if (!keineVerbindung) {
					startActivity(new AntenneIntent(MainActivity.this,
							LigaActivity.class, "Damenfussball", null, null));
					overridePendingTransition(R.anim.openactivity,
							R.anim.activitydisappear);
				}
			}
		});

		handball = (Button) findViewById(R.id.handball_button);
		handball.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View arg0) {
				prüfeVerbindung();
				if (!keineVerbindung) {
					startActivity(new AntenneIntent(MainActivity.this,
							LigaActivity.class, "Handball", null, null));
					overridePendingTransition(R.anim.openactivity,
							R.anim.activitydisappear);
				}
			}
		});

		hockey = (Button) findViewById(R.id.hockey_button);
		hockey.setEnabled(false);
		// hockey.setOnClickListener(new OnClickListener() {
		//
		// @Override
		// public void onClick(View arg0) {
		// prüfeVerbindung();
		// if(!keineVerbindung) {
		// startActivity(new AntenneIntent(MainActivity.this,
		// LigaActivity.class, "Eishockey", null, null));
		// overridePendingTransition(R.anim.activityappear,
		// R.anim.activitydisappear);
		// }
		// }
		// });

		ImageView antenne_logo = (ImageView) findViewById(R.id.logo_antenne);
		antenne_logo.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// Antenne-Webseite öffnen
				Intent intent = new Intent();
				intent.setAction(Intent.ACTION_VIEW);
				intent.addCategory(Intent.CATEGORY_BROWSABLE);
				intent.setData(Uri.parse("http://www.dieantenne.it/"));
				startActivity(intent);
			}
		});

		ImageView lnd_logo = (ImageView) findViewById(R.id.logo_lnd);
		lnd_logo.setOnClickListener(new OnClickListener() {

			@Override
			public void onClick(View v) {
				// Antenne-Webseite öffnen
				Intent intent = new Intent();
				intent.setAction(Intent.ACTION_VIEW);
				intent.addCategory(Intent.CATEGORY_BROWSABLE);
				intent.setData(Uri.parse("http://www.figcbz.it/"));
				startActivity(intent);
			}
		});
	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		addLiveStreamMenuItem(menu, this);
		return super.onCreateOptionsMenu(menu);
	}

	@Override
	public boolean onPrepareOptionsMenu(Menu menu) {
		updateLiveStreamMenuItemText(menu.getItem(0));
		return super.onPrepareOptionsMenu(menu);
	}

	@Override
	protected void onStop() {
		super.onStop();
		if (alert != null && alert.isShowing())
			alert.dismiss();
	}

	@Override
	public void onBackPressed() {
		super.onBackPressed();
		radioStreamStoppen();
	}

	/*
	 * Pr�ft ob eine Verbindung vorhanden ist falls nicht wird keineVerbindung
	 * auf true gesetzt und eine Fehlermeldung erstellt sonst wird
	 * keineVerbindung auf false gesetzt
	 */
	void prüfeVerbindung() {
		if (!verbindungVorhanden()) {
			keineVerbindung = true;
			macheVerbindungsfehlerDialog();
		} else
			keineVerbindung = false;
	}

	/*
	 * Pr�ft, ob eine Internetverbindung vorhanden ist falls nicht wird false
	 * zur�ckgeliefert falls schon wird true zur�ckgeliefert
	 */
	boolean verbindungVorhanden() {
		ConnectivityManager cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
		NetworkInfo info = cm.getActiveNetworkInfo();
		if (info == null) {
			return false;
		} else
			return true;
	}

	/*
	 * Ein Dialog wird erstellt, der anzeigt, dass keine Internetverbindung
	 * vorhanden ist mit dem OK-Button wird der Dialog beendet
	 */
	void macheVerbindungsfehlerDialog() {
		AlertDialog.Builder builder = new AlertDialog.Builder(this);
		builder.setTitle("Keine Internetverbindung");
		builder.setMessage("Bitte Internetverbindung aktivieren!");
		builder.setCancelable(false);
		builder.setNegativeButton("Ok", new DialogInterface.OnClickListener() {

			@Override
			public void onClick(DialogInterface dialog, int which) {
				alert.dismiss();
			}
		});
		alert = builder.create();
		alert.show();
	}

	/**
	 * Gibt die Display-Breite zurück.
	 * 
	 * @param activity
	 *            die aktuelle Activity
	 * @return die Display-Breite in px
	 */
	public static int getWindowWidth(Activity activity) {
		DisplayMetrics dm = new DisplayMetrics();
		activity.getWindowManager().getDefaultDisplay().getMetrics(dm);
		return dm.widthPixels;
	}

	/**
	 * Startet den Antenne Live-Stream.
	 * 
	 */
	public static void radioStreamStarten() throws Exception {
		radioPlayer = new MediaPlayer();
		radioPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
		radioPlayer.setDataSource("http://server2.digital-webstream.de:23780/");
		radioPlayer.prepare();
		radioPlayer.start();
	}

	/**
	 * Stoppt den Antenne Live-Stream.
	 */
	public static void radioStreamStoppen() {
		if (radioPlayer != null && radioPlayer.isPlaying())
			radioPlayer.stop();
	}

	/**
	 * Fügt das MenuItem zum Starten und Stoppen des Antenne Live-Streams zum
	 * übergebenen Menu hinzu.
	 * 
	 * @param menu
	 *            das Menu
	 * @param context
	 *            der Context
	 */
	public static void addLiveStreamMenuItem(Menu menu, final Context context) {
		final MenuItem streamItem;
		if (radioPlayer != null && radioPlayer.isPlaying())
			// Radio-Stream läuft
			streamItem = menu.add("dieAntenne Live-Stream stoppen");
		else
			// Stream läuft nicht
			streamItem = menu.add("dieAntenne Live-Stream starten");

		streamItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {

			@Override
			public boolean onMenuItemClick(MenuItem item) {
				if (radioPlayer == null || !radioPlayer.isPlaying()) {
					try {
						radioStreamStarten();
					} catch (Exception e) {
						Toast.makeText(
								context,
								"Fehler beim Starten des Live-Streams. Internetverbindung prüfen!",
								Toast.LENGTH_LONG).show();
					}
					streamItem.setTitle("dieAntenne Live-Stream stoppen");
				} else {
					radioStreamStoppen();
					streamItem.setTitle("dieAntenne Live-Stream starten");
				}
				return true;
			}
		});
	}

	/**
	 * Aktualisiert den Text des übergebenen MenuItems. Falls der Radio-Stream
	 * gerade läuft wird der Text auf "stoppen" geändert, sonst auf "starten".
	 * 
	 * @param item
	 *            das MenuItem zum starten/stoppen des Radio-Streams
	 */
	public static void updateLiveStreamMenuItemText(MenuItem item) {
		if (radioPlayer != null && radioPlayer.isPlaying())
			item.setTitle("dieAntenne Live-Stream stoppen");
		else
			item.setTitle("dieAntenne Live-Stream starten");
	}
}
